// Copyright (c) 2009, David Aiken
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the organization to which the authors belong nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY AUTHORS AND CONTRIBUTORS ''AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL AUTHORS AND CONTRIBUTORS BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/*
 *----------------------------------------------------------------------------
 * Lists the contents of a PRT file specified on the command line to stdout
 */
#define HDK_RELAXED_GB

#ifndef _MSC_VER
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif

#include <string.h>
#include <vector>
#include <stdexcept>

#include "../PRT.h"
#include <stdio.h>

using namespace HDK_PRT;
using namespace std;

double
readFile(PRT &prt, const char *path)
{
    prt.readFromFile(path);
    return prt.printValues(true);
}

void
printHelp(std::string progname)
{
    printf("Syntax: %s <prt file path>\n", progname.c_str());
}

int
main(int argc, char **argv)
{
    int retval = 0;

    vector<string> args(argv, argv + argc);
    if(argc == 1)
    {
        printHelp(argv[0]);
        return 0;
    }

    for (vector<string>::iterator i = args.begin(); i != args.end(); ++i)
    {
        if (*i == "-h" || *i == "--help")
        {
            printHelp(argv[0]);
            return 0;
        }
    }

    printf("Reading file: %s", args.back().c_str());

    try
    {
        PRT prt;
        readFile(prt, args[argc-1].c_str());
    }
    catch(std::runtime_error &e)
    {
        fprintf(stderr, "\nEXCEPTION: %s", e.what());
    }
    catch(...)
    {
        fprintf(stderr, "\nUnexpected exception");
    }
    return retval;
}
